<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- v-on:事件类型可以简写为@事件类型 -->
        <!-- 
            在v-on的插值语法中可以不用书写函数
            可以执行一些简单的逻辑操作(访问到vm上的属性和方法,执行一些运算符的操作)
       -->
        <button @click="count++">累加</button>
        <button @click="count += 5">累加n</button>
        
        <!-- 
        以下代码不可以!!!
        因为插值语法中是直接访问vm身上的属性和方法
        -->
        <button @click="alert(1)"></button>


        <!-- 如果绑定事件函数的时候没有加小括号,则在事件函数中直接使用第一个形参接受event事件对象 -->
        <button @click="fn1">事件对象1</button>
        <!-- 一旦在给事件绑定事件函数的时候,添加了括号,事件函数不会直接调用,还是等事件触发的时候才调用 -->
        <!-- 但是此时，我们不能直接在形参中接收event事件对象了 -->
        <!-- 我们需要在绑定事件函数的小括号中，显性传递一个$event实参(在v-on绑定事件的插值语法中，默认是存在一个$event的值，代表当前的event事件对象)，将来在事件函数中接收，接收的这个值就是event事件对象 -->
        <button @click="fn2($event)">事件对象2</button>
        <button @click="fn3($event, 2)">事件对象3,多个参数</button>
        <p>{{count}}</p>
    </div>
    <script>
        Vue.config.productionTip = false;
        const vm = new Vue({
            el: "#app",
            data() {
                return {
                    count: 1,
                }
            },
            methods: {
                fn1(event) {
                    console.log(event, 'fn1');
                },
                fn2(event) {
                    console.log(event, 'fn2');
                },
                fn3(event,a) {
                    console.log(event, a, 'fn3');
                }
            }
        })
    </script>
</body>
</html>